package com.zyy.joseata.util;

import com.zyy.joseata.bo.TxClazzBO;

import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class TxClazzMapUtil {

    private static Map<String, TxClazzBO> txIdKeyClazzMap = new ConcurrentHashMap<>();

    private static Map<Class,TxClazzBO> clazzKeyTxClazzMap = new ConcurrentHashMap<>();

    public static void setTxClazz(String txId,TxClazzBO txClazz) {
        if(!txIdKeyClazzMap.containsKey(txId)){
            txIdKeyClazzMap.put(txId,txClazz);
        }
    }

    public static TxClazzBO getTxClazz(String txId) {
        return txIdKeyClazzMap.get(txId);
    }

    /**
     * 获取事务的Confirm方法名
     * @param txId
     * @return
     */
    public static Method getTxConfirmMethod(String txId) {
        TxClazzBO txClazz = txIdKeyClazzMap.get(txId);
        if(txClazz != null) {
            return txClazz.getConfirmMethod();
        }else{
            return null;
        }
    }

    public static Method getTxCancelMethod(String txId){
        TxClazzBO txClazz = txIdKeyClazzMap.get(txId);
        if(txClazz != null) {
            return txClazz.getCancelMethod();
        }
        return null;
    }

    public static void setTxConfirmMethod(String txId,Method confirmMethod) {
        TxClazzBO txClazz = txIdKeyClazzMap.get(txId);
        if(txClazz != null) {
            txClazz.setConfirmMethod(confirmMethod);
        }
    }

    public static void setTxCancelMethod(String txId,Method cancelMethod) {
        TxClazzBO txClazz = txIdKeyClazzMap.get(txId);
        if(txClazz != null) {
            txClazz.setCancelMethod(cancelMethod);
        }
    }

    public static void setClazzMethod(Class<?> clazz,Method confirmMethod,Method cancelMethod) {
        if(!clazzKeyTxClazzMap.containsKey(clazz)){
            TxClazzBO txClazz = new TxClazzBO();
            txClazz.setClazz(clazz);
            txClazz.setConfirmMethod(confirmMethod);
            txClazz.setCancelMethod(cancelMethod);
            clazzKeyTxClazzMap.put(clazz,txClazz);
        }
    }

    public static TxClazzBO getClazz(Class<?> clazz) {
        return clazzKeyTxClazzMap.get(clazz);
    }
}
